﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://ac.nowcoder.com/acm/problem/260770
/*
题目描述：
链接：https://ac.nowcoder.com/acm/problem/260770
来源：牛客网

小红拿到了一个长度为
𝑛
n的字符串，她准备选取一段子串，满足该子串中字母的种类数量在[l,r]之间。小红想知道，一共有多少种选取方案？
输入描述:
第一行输入三个正整数
𝑛
,
𝑙
,
𝑟
n,l,r
第二行输入一个仅包含小写字母的字符串。
1
≤
𝑛
≤
200000
1≤n≤200000
1
≤
𝑙
≤
𝑟
≤
26
1≤l≤r≤26
输出描述:
合法的方案数。
示例1
输入
复制
3 2 2
aba
输出
复制
3
示例2
输入
复制
5 1 2
abcda
输出
复制
9
示例3
输入
复制
10 2 4
abcaacbdef
输出
复制
33
*/


// 开始解题：
// 方法——滑动窗口 + 前缀和思想
#include <iostream>
#include <cstring>
using namespace std;
const int N = 2e5 + 10;
char s[N];
int n = 0, l = 0, r = 0;
// 找出s中字符种类在[1, x]之间的子串的个数
long long find(int x) {
    if (x == 0) {
        return 0;
    }
    long long ret = 0;
    int _hash[26] = { 0 }, kinds = 0;
    for (int left = 0, right = 0; right < n; right++) {
        if (_hash[s[right] - 'a']++ == 0) {
            kinds++;
        }
        while (kinds > x) {
            if (--_hash[s[left] - 'a'] == 0) {
                kinds--;
            }
            left++;
        }
        ret += right - left + 1;
    }
    return ret;

}

int main() {
    scanf("%d%d%d", &n, &l, &r);
    scanf("%s", s);
    cout << find(r) - find(l - 1) << endl;
    return 0;
}
